<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> 对象创建的场景砸用 </title>
</head>
<body>
    
</body>
</html>
<script>
 /*方式1
    *Object构造函数模式
    *套路：     先创建 kongobj对象 再动态添加属性/方法
    *适用场景： 不确定对象内不数据
    *问题：     语句太多  
 */ 
    //一个人 name:"东东" age:"18"
        var p = new Object()
        p.name = "东东";
        p.age = 18;
        p.setName = function (name) {
            this.name = name;
        }
        p.setName("老王")
        console.log(p)  //{name: "老王", age: 18, setName: ƒ}age: 18name: "老王"setName: ƒ (name)__proto__: Object
    

/*方式2 
    *对象字面量
    *套路：       使用{}创建对象 同时指定属性和方法 
    *使用场景：   起始时对象内部时确定的  
    *问题：       如果场景多个对象 有重复的代码 
*/
        var a = {
            name:"东东",
            age: 18,
            setName:function(name){
                this.name = name;
            }
        }
        console.log(a.name ,a.age)   // 东东 18 
        a.setName("赵四儿")
        console.log(a.name)          //赵四 


// 工厂函数模式的  
    //当你的函数返回的时应该对象时 都可以称之为工厂 
    
/*
    Object.assign()
通过复制一个或多个对象来创建一个新的对象。

Object.create()
使用指定的原型对象和属性创建一个新对象。

Object.defineProperty()
给对象添加一个属性并指定该属性的配置。

Object.defineProperties()
给对象添加多个属性并分别指定它们的配置。

Object.entries()
返回给定对象自身可枚举属性的 [key, value] 数组。

Object.freeze()
冻结对象：其他代码不能删除或更改任何属性。

Object.getOwnPropertyDescriptor()
返回对象指定的属性配置。

Object.getOwnPropertyNames()
返回一个数组，它包含了指定对象所有的可枚举或不可枚举的属性名。

Object.getOwnPropertySymbols()
返回一个数组，它包含了指定对象自身所有的符号属性。

Object.getPrototypeOf()
返回指定对象的原型对象。

Object.is()
比较两个值是否相同。

Object.isExtensible()
判断对象是否可扩展。

Object.isFrozen()
判断对象是否已经冻结。

Object.isSealed()
判断对象是否已经密封。

Object.setPrototypeOf()
设置对象的原型（即内部 [[Prototype]] 属性）。
*/






</script>